উদাহরণ সহ Stored Procedures এর ব্যবহার

Java Technologies - স্প্রিং জেডিবিসি (Spring JDBC) Spring JDBC এবং Stored Procedures |
81
81

Spring JDBC-তে Stored Procedures ব্যবহার করার মাধ্যমে আপনি ডেটাবেসে সংরক্ষিত পদ্ধতিগুলি (যা ডেটাবেস সার্ভারে সংরক্ষিত থাকে) কল করতে পারেন। এটি বিশেষত যখন ডেটাবেসের মধ্যে জটিল লজিক বা কোড থাকে এবং আপনি সেই লজিকগুলো অ্যাপ্লিকেশন লেভেলে না লিখে সরাসরি ডেটাবেস থেকে ব্যবহার করতে চান, তখন কার্যকর।

Spring JDBC-তে Stored Procedure কল করার জন্য JdbcTemplate বা SimpleJdbcCall ব্যবহার করা হয়। এখানে আমরা SimpleJdbcCall এর মাধ্যমে Stored Procedure ব্যবহার করার উদাহরণ দেখব।

Step 1: application.properties ফাইলে ডেটাবেস কনফিগারেশন

প্রথমে, application.properties ফাইলে ডেটাবেস কনফিগারেশন করতে হবে:

# DataSource Configuration
spring.datasource.url=jdbc:mysql://localhost:3306/your_database
spring.datasource.username=root
spring.datasource.password=root_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

Step 2: Stored Procedure তৈরি করুন (ডেটাবেসে)

ধরা যাক, আমরা একটি Stored Procedure তৈরি করতে যাচ্ছি যা একটি কর্মীর তথ্য খুঁজে বের করবে তার আইডি দিয়ে। MySQL এ উদাহরণ:

DELIMITER CREATEPROCEDUREgetEmployeeDetails(INempIdINT)BEGINSELECTid,name,salaryFROMemployeeWHEREid=empId;END

CREATE PROCEDURE getEmployeeDetails (IN empId INT)
BEGIN
    SELECT id, name, salary
    FROM employee
    WHERE id = empId;
END

DELIMITER ;

এই Stored Procedure এর মাধ্যমে employee টেবিল থেকে নির্দিষ্ট id এর কর্মীর বিস্তারিত তথ্য পাওয়া যাবে।

Step 3: Spring JDBC এর মাধ্যমে Stored Procedure কল করা

Spring JDBC-তে Stored Procedure কল করার জন্য SimpleJdbcCall ব্যবহার করা হয়, যা ডেটাবেসের Stored Procedure কল করার প্রক্রিয়াকে সরল করে দেয়।

import org.springframework.jdbc.core.SimpleJdbcCall;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.stereotype.Repository;

import javax.sql.DataSource;
import java.util.Map;

@Repository
public class EmployeeRepository {

    private SimpleJdbcCall simpleJdbcCall;

    // Constructor injection for DataSource
    public EmployeeRepository(DataSource dataSource) {
        this.simpleJdbcCall = new SimpleJdbcCall(dataSource)
            .withProcedureName("getEmployeeDetails");  // Stored Procedure Name
    }

    public Map<String, Object> getEmployeeDetails(int empId) {
        // Create input parameter map
        Map<String, Object> inParams = Map.of("empId", empId);

        // Execute stored procedure and get the result
        Map<String, Object> result = simpleJdbcCall.execute(inParams);

        return result;
    }
}

Step 4: Service Layer এ Stored Procedure কল করুন

এখন EmployeeService ক্লাসে getEmployeeDetails মেথডটি কল করুন:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Map;

@Service
public class EmployeeService {

    private final EmployeeRepository employeeRepository;

    @Autowired
    public EmployeeService(EmployeeRepository employeeRepository) {
        this.employeeRepository = employeeRepository;
    }

    public Map<String, Object> getEmployeeDetails(int empId) {
        return employeeRepository.getEmployeeDetails(empId);
    }
}

Step 5: Controller তৈরি করুন (Optional)

Spring MVC Controller তৈরি করে ওয়েব রেসপন্স এ getEmployeeDetails মেথড কল করতে পারেন:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

@RestController
public class EmployeeController {

    private final EmployeeService employeeService;

    @Autowired
    public EmployeeController(EmployeeService employeeService) {
        this.employeeService = employeeService;
    }

    @GetMapping("/employee/details")
    public Map<String, Object> getEmployeeDetails(@RequestParam int empId) {
        return employeeService.getEmployeeDetails(empId);
    }
}

এখন, আপনি GET /employee/details?empId=1 কল করে কর্মীর বিস্তারিত তথ্য পেতে পারবেন।


Step 6: Spring Boot Application রান করুন

এখন আপনি Spring Boot অ্যাপ্লিকেশনটি রান করতে পারেন এবং GET /employee/details?empId=1 এ গিয়ে Stored Procedure এর মাধ্যমে কর্মীর তথ্য পেতে পারবেন।


Stored Procedure কল করার সময় আরও কিছু গুরুত্বপূর্ণ বিষয়:

  1. আউটপুট হ্যান্ডলিং: যদি Stored Procedure থেকে আউটপুট আর্জি করা হয় (যেমন, আউটপুট প্যারামিটার বা রেজাল্ট সেট), SimpleJdbcCall তাতে ব্যবহৃত মানগুলিকে হ্যান্ডল করতে পারে। এই জন্য declareParameters বা returningResultSet মেথড ব্যবহার করা হয়।
  2. আউটপুট প্যারামিটার হ্যান্ডলিং: আউটপুট প্যারামিটার নিতে হলে SimpleJdbcCall এ আউটপুট প্যারামিটার ঘোষণা করতে হয়।

    উদাহরণ:

    simpleJdbcCall = new SimpleJdbcCall(dataSource)
            .withProcedureName("getEmployeeDetails")
            .declareParameters(new SqlOutParameter("outParam", Types.VARCHAR));
    
  3. স্টোরড প্রোসিডিউরের ইনপুট আর্গুমেন্ট: যখন আপনার স্টোরড প্রোসিডিউরে ইনপুট আর্গুমেন্ট থাকে, তখন আপনি সেগুলিকে Map এর মাধ্যমে পাস করেন, যেমন:

    Map<String, Object> inParams = Map.of("empId", empId);
    

Stored Procedure এর সুবিধা:

  1. কোড রিউজেবিলিটি: একবার ডেটাবেসে Stored Procedure তৈরি করার পর, সেটি বিভিন্ন অ্যাপ্লিকেশন থেকে ব্যবহার করা যায়, যা কোডের পুনরাবৃত্তি কমায়।
  2. পারফর্মেন্স বৃদ্ধি: Stored Procedure গুলি ডেটাবেসের মধ্যে সংরক্ষিত থাকে, তাই এগুলি কম্পাইল হওয়া এবং অপটিমাইজ করা থাকে, যা পারফর্মেন্স বৃদ্ধি করে।
  3. লজিক ইনক্যাপসুলেশন: ডেটাবেস লজিক অ্যাপ্লিকেশন থেকে আলাদা থাকে, যার ফলে অ্যাপ্লিকেশন কোড সহজ এবং পরিষ্কার হয়।
  4. ডেটাবেস নির্ভরতা: জটিল লজিক ডেটাবেসে সংরক্ষিত থাকলে, অ্যাপ্লিকেশন কোড কম জটিল হয় এবং সহজে মেইন্টেইন করা যায়।

Spring JDBC এর মাধ্যমে Stored Procedure ব্যবহারে আপনি ডেটাবেসের মধ্যে সংরক্ষিত লজিক সহজভাবে কল করতে পারেন, যা আপনার অ্যাপ্লিকেশনকে আরও কার্যকর এবং স্কেলেবল করে তোলে।

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion